/**
 * 官方题解：循环第一个值的长度，纵向扫描。遇到比第一个值长度短的或者不相同的跳出循环
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
    if (!strs || strs.length === 0) return ""

    let first = strs[0]
    for (let i = 0; i < first.length; i++) {
        const char = first[i];
        for (let j = 0; j < strs.length; j++) {
            const item = strs[j];
            if (i === item.length || char !== item[i]) {
                return first.slice(0, i)
            }
        }
    }
    return first
}


/**
 * 每次给tempResult增加数组所有值的某一位，如果相同则不增加，即如果数组所有值的第一位都相同，则给tempResult增加一位，
 * 如果增加的次数和长度不对应则停止。类似官方题解中的纵向扫描
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
    if (!strs) return ""
    let tempResult = "", strIndex = 0, first = strs[0]
    while (true) {
        for (let index = 0; index < strs.length; index++) {
            const item = strIndex < strs[index].length ? strs[index][strIndex] : " ";
            if (tempResult[strIndex] !== item) {
                tempResult += item
            }
        }
        if (strIndex >= first.length || (tempResult.length !== strIndex + 1)) break
        strIndex++
    }
    return tempResult.slice(0, strIndex)
}
